package function1;

import lombok.extern.log4j.Log4j2;

import java.util.function.Consumer;
import java.util.function.Function;
import java.util.function.Supplier;

/**
 * @Description TODO
 * @Author li
 * @Date 2022/5/9 11:10 下午
 */
public class FunctionClass {
    /**
     * 功能描述 Function也是一个函数式编程接口；
     *         它代表的含义是“函数”，而函数经常是有输入输出的，
     *         因此它含有一个apply方法，包含一个入参与一个返回值，
     *         可以用作装箱或者拆箱某个对象
     * @author YiPeng
     * @date 2022/5/10
     * @param * @param:		null 
     * @return void
     */
    public static void functionDemo(){
        Function<Integer,Integer> function = s -> ++s;
        Function<Integer,Integer> function1 = s -> s*2;
        // 先执行 function 拿结果 执行 function1
        Integer apply = function.apply(2);
        Integer apply1 = function1.apply(apply);
        System.out.println("apply:"+apply +",apply1:"+apply1);
        // 优化 compose ：apply(before.apply(v))
        // 先执行 function1 拿 function1 的结果 执行 function
        System.out.println(function.compose(function1).apply(1));
    }

    public static void main(String[] args) {
        functionDemo();
    }
}
